package com.sz.virtualbank.service.notification;

import com.sz.virtualbank.dao.entity.Notification;

import java.util.Map;

/**
 * 通知消息服务接口
 * 
 * @author Claude
 */
public interface NotificationService {
    
    /**
     * 创建通知消息
     *
     * @param userId 用户ID
     * @param title 标题
     * @param content 内容
     * @param type 消息类型(1:系统消息,2:交易通知,3:活动消息)
     * @return 通知消息
     */
    Notification createNotification(Long userId, String title, String content, Integer type);
    
    /**
     * 查询消息列表
     *
     * @param userId 用户ID
     * @param type 消息类型（可选）
     * @param status 消息状态（可选）
     * @param page 页码
     * @param size 每页条数
     * @return 消息列表与总数
     */
    Map<String, Object> getNotificationList(Long userId, Integer type, Integer status, Integer page, Integer size);
    
    /**
     * 查询消息详情
     *
     * @param id 消息ID
     * @param userId 用户ID
     * @return 消息详情
     */
    Notification getNotificationDetail(Long id, Long userId);
    
    /**
     * 标记消息为已读
     *
     * @param id 消息ID
     * @param userId 用户ID
     * @return 是否成功
     */
    boolean markAsRead(Long id, Long userId);
    
    /**
     * 标记所有消息为已读
     *
     * @param userId 用户ID
     * @return 是否成功
     */
    boolean markAllAsRead(Long userId);
    
    /**
     * 删除消息
     *
     * @param id 消息ID
     * @param userId 用户ID
     * @return 是否成功
     */
    boolean deleteNotification(Long id, Long userId);
    
    /**
     * 查询未读消息数量
     *
     * @param userId 用户ID
     * @return 未读消息数量
     */
    int countUnreadNotifications(Long userId);
    
    /**
     * 发送系统消息
     *
     * @param userId 用户ID
     * @param title 标题
     * @param content 内容
     * @return 通知消息
     */
    Notification sendSystemMessage(Long userId, String title, String content);
    
    /**
     * 发送交易通知
     *
     * @param userId 用户ID
     * @param title 标题
     * @param content 内容
     * @return 通知消息
     */
    Notification sendTransactionNotification(Long userId, String title, String content);
    
    /**
     * 发送活动消息
     *
     * @param userId 用户ID
     * @param title 标题
     * @param content 内容
     * @return 通知消息
     */
    Notification sendActivityMessage(Long userId, String title, String content);
}
